/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package lu.med.praxiswahl.wahlumed.service.beans;

import java.util.Calendar;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import lu.med.praxiswahl.wahlumed.dao.beans.daointerface.CalendarDAOInt;
import lu.med.praxiswahl.wahlumed.model.beans.AccountingTBL;
import lu.med.praxiswahl.wahlumed.model.beans.CalendarTBL;
import lu.med.praxiswahl.wahlumed.model.beans.CustomerTBL;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.BufferServiceInt;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.CalendarServiceInt;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.CustomerServiceInt;

/**
 * 
 * @author pkendzo
 */

@Stateless
@Remote({ CalendarServiceInt.class })
public class CalendarService implements CalendarServiceInt {

	@EJB
	private CalendarDAOInt calDao;

	private CalendarTBL tmpCal;

	@EJB
	private CustomerServiceInt cust;

	@EJB
	private BufferServiceInt buffer;

	public CalendarService() {

		tmpCal = new CalendarTBL();

	}

	public int createAppointment(Calendar datum, String uhrzeit,
			String matricule) {

		tmpCal.setDatum(datum);
		tmpCal.setRv_uhrzeit(uhrzeit);
		tmpCal.setCustomer(cust.getCustomer(matricule));
		// Aufgrund der zu Oft benutzte Begriff "Kontrolle"
		tmpCal.setUntersuchungstyp("Kontrolle");

		calDao.persist(tmpCal);

		return RET_OPERATION_DONE_PROPERLY;

	}
	
	@Override
	public int createAppointment(CalendarTBL instance) {

		instance.setUntersuchungstyp("Kontrolle");
		calDao.persist(instance);

		return RET_OPERATION_DONE_PROPERLY;

	}
	

	public void getA_CalendarInstance(CalendarTBL cal) {
		tmpCal = cal;
	}

	@Override
	public CalendarTBL[] getAllTermineByDate(Calendar datum) {
		Object[] tmp = calDao.listRVByDate(datum).toArray();
		CalendarTBL[] eintraege = new CalendarTBL[tmp.length];

		for (int i = 0; i < tmp.length; i++) {
			eintraege[i] = (CalendarTBL) tmp[i];
		}

		return eintraege;
	}

	@Override
	public CalendarTBL[] getAllAppointmentOf_Customer(String cust_matricule) {
		Object[] tmp = calDao.findRVByCustomer(cust_matricule).toArray();
		CalendarTBL[] eintraege = new CalendarTBL[tmp.length];

		for (int i = 0; i < tmp.length; i++) {
			eintraege[i] = (CalendarTBL) tmp[i];
		}
		return eintraege;
	}

	public Calendar getDatum() {
		return tmpCal.getDatum();
	}

	public String getTerminUrhZeit() {
		return tmpCal.getRv_uhrzeit();
	}

	public CustomerTBL getPatientin() {
		return tmpCal.getCustomer();
	}

	public String getUS_Typ() {
		return tmpCal.getUntersuchungstyp();
	}

	public String getRV_Aenderung() {
		return tmpCal.getRv_aenderung();
	}

	public String getAnkunft() {
		return tmpCal.getAnkunft_zeit();
	}

	public String getUS_Beginn() {
		return tmpCal.getUntersuchungsbeginn();
	}

	public String getWarteZeit() {
		return tmpCal.getWartezeit();
	}

	public String getSortie() {
		return tmpCal.getSortie();
	}

	/*************************/

	public void setUS_Typ(String typ) {
		tmpCal.setUntersuchungstyp(typ);
		calDao.update(tmpCal);

	}

	public void setRV_Aenderung(String aenderung) {
		tmpCal.setRv_aenderung(aenderung);
		calDao.update(tmpCal);
	}

	public void setAnkunft(String ankunft) {
		tmpCal.setAnkunft_zeit(ankunft);
		calDao.update(tmpCal);
	}

	public void setUS_Beginn(String beginn) {
		tmpCal.setUntersuchungsbeginn(beginn);
		calDao.update(tmpCal);
	}

	public void setWarteZeit(String zeit) {
		tmpCal.setWartezeit(zeit);
		calDao.update(tmpCal);
	}

	public void setSortie(String sortie) {
		tmpCal.setSortie(sortie);
		calDao.update(tmpCal);

		buffer.clearConsultingRoom();
	}

	@Override
	public void setLocked(boolean lock) {
		tmpCal.setLocked(new Boolean(lock));
		calDao.update(tmpCal);
	}

	@Override
	public void setLastEditor(AccountingTBL account) {
		tmpCal.setLastEditor(account);
		calDao.update(tmpCal);
	}

	@Override
	public void setLastEditTime(Calendar time) {
		tmpCal.setLastEditTime(time);
		calDao.update(tmpCal);
	}

	@Override
	public CalendarTBL getEntryByDatum_und_Uhrzeit(Calendar datum,
			String Uhrzeit) {

		return calDao.getEntryByDate_And_Time(datum, Uhrzeit);
	}

	@Override
	public int deleteCalEntry() {
		calDao.delete(tmpCal.getId());

		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public int moveCalEntryByDatum_und_Uhrzeit(Calendar fromDatum,
			String fromUhrzeit, Calendar toDatum, String toUhrzeit) {
		// CustomerTBL tmpC = tmpCal.getCustomer();

		// this.createAppointment(toDatum, toUhrzeit,
		// tmpCal.getCustomer().getMatrikel_nummer());
		// calDao.delete(tmpCal.getId());

		tmpCal.setDatum(toDatum);
		tmpCal.setRv_uhrzeit(toUhrzeit);
		calDao.update(tmpCal);

		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public boolean getNewCustomer_GreenColor() {

		return tmpCal.getNewCustomer_GreenColor();
	}

	@Override
	public void setNewCustomer_GreenColor(boolean value) {
		tmpCal.setNewCustomer_GreenColor(value);
		calDao.update(tmpCal);
	}

	@Override
	public String getH_Cash() {
		return tmpCal.getHCash();
	}

	@Override
	public String getH_Erstellt() {
		return tmpCal.getHErstellt();
	}

	@Override
	public String getH_Karte() {
		return tmpCal.getHKarte();
	}

	@Override
	public void setH_Cash(String cash) {
		tmpCal.setHCash(cash);
		calDao.update(tmpCal);
	}

	@Override
	public void setH_Erstellt(String erstellt) {
		tmpCal.setHErstellt(erstellt);
		calDao.update(tmpCal);
	}

	@Override
	public void setH_Karte(String karte) {
		tmpCal.setHKarte(karte);
		calDao.update(tmpCal);
	}

	@Override
	public int copyCalEntryByDatum_und_Uhrzeit(Calendar toDatum,
			String toUhrzeit) {

		CalendarTBL cal = new CalendarTBL();

		cal.setCustomer(tmpCal.getCustomer());
		cal.setNewCustomer_GreenColor(tmpCal.getNewCustomer_GreenColor());
		cal.setUntersuchungstyp(tmpCal.getUntersuchungstyp());

		cal.setDatum(toDatum);
		cal.setRv_uhrzeit(toUhrzeit);
		calDao.persist(cal);

		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public CalendarTBL[] getAllAppointmentOf_Customer(String cust_matricule,
			String fromDatum, String toDatum) {
		Object[] tmp = calDao.findRVByCustomer(cust_matricule, fromDatum,
				toDatum).toArray();
		CalendarTBL[] eintraege = new CalendarTBL[tmp.length];

		for (int i = 0; i < tmp.length; i++) {
			eintraege[i] = (CalendarTBL) tmp[i];
		}
		return eintraege;
	}

	@Override
	public CalendarTBL[] getAllEntriesForUS(String suchBezeichner) {

		Object[] tmp = calDao.findRVBySearchString(suchBezeichner).toArray();
		CalendarTBL[] eintraege = new CalendarTBL[tmp.length];

		for (int i = 0; i < tmp.length; i++) {
			eintraege[i] = (CalendarTBL) tmp[i];
		}
		return eintraege;
	}

}
